#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<string.h>
using namespace std;



// void hadnler(int sig)
// {
//         cout<<"get a sig :"<<sig<<endl;
// }
// int main()
// {
//     signal(SIGFPE,hadnler);
//     //除0；
//     int a = 10;
//     a/=0;
//     int *p = nullptr;
//     *p = 100;
//     while (true)
//     {
//         sleep(1);
//     }
//     return 0;
// }



// void hadnler(int sig)
// {
//     std::cout<<"get a sig:"<<"g_cnt"<<g_cnt<<std::endl;
//     unsigned int n = alarm(5);
//     cout<<"剩余多少时间："<<endl;
//     exit(0);
// }
// int g_cnt = 0;
// int ret = 0;
// int mian()
// {
//     //设定闹钟
//     //信号捕捉,搭建起某个信号和对应信号之间的联系
//     signal(SIGALRM,hadnler);// 定时功能
//     alarm(5);//经过5秒响一次
//     while (true)
//     {
//         g_cnt++;//纯内存级
//     }
//     int cnt = 0;
//     while (true)
//     {
//         sleep(1);
//         cout<<"cnt"<<cnt<<"pid :"<<getpid()<<endl;
//         if(cnt==2)
//         {
//             int n = alarm(0);//alarm(0)取消闹钟
//             cout<<"alarm(0) ret:"<<n<<endl;
//         }
//     }
    
//     return 0;
// }




// void headler(int signumber)
// {
//     std::cout<<"signal,number is: "<<signumber<<std::endl;
// }
// int main()
// {
//     //发送信号和检测信号
//     signal(2,headler);
//     int cnt = 0;
//     while (true)
//     {
//         cout<<"cnt"<<cnt++<<endl;
//         sleep(1);
//         if(cnt%5==0)
//         {
//             cout<<"send 2to caller"<<endl;
//             //发送信号
//             raise(2);
//             //检测信号,检测到错误条件终止
//             abort();
//         }
//     }
    
// }




//kill-9
// int main(int argc,char *argv[])
// {
//     if(argc!=3)
//     {
//         cout<<"Usage"<<argv[0]<<"-signumber"<<endl;
//     }
//     int signumber = stoi(argv[1]+1);
//     int pid = stoi(argv[2]);
//     int n  = kill(pid,signumber);
//     if(n<0)
//     {
//         cerr<<"kill error,"<<strerror(errno)<<endl;
//     }
//     return 0;
// }

// void handler(int signo)
// {
//     std::cout<<"get a sig number is : "<<signo<<std::endl;
// }
// void handlerquit(int signoquit)
// {
//     std::cout<<"退出信号 :"<<signoquit<<std::endl;
// }
// int main()
// {
//     //siganl调用完，handler方法会被立即执行码？不会，设施对应的信号处理方法
//     //收到对应的信号才执行handler方法
//     //进程永远没有收到SIGINT呢？handler也就永远不会被调用
//     signal(SIGINT,handler);//捕捉
//     signal(SIGQUIT,handlerquit);
//     //ctrl+c 组合信号 os解释为2号退出信号，向目标进程进行发送->进程收到->进程响应
//     signal(SIGINT,SIG_IGN);
//     while (true)
//     {
//         std::cout<<"pid:"<<getpid()<<std::endl;
//         sleep(1);
//     }
    
//     return 0;
// }